]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
telepathyClient: only notify on new channels when asked to do so
authorJonny Lamb <jonnylamb@gnome.org>
Thu, 15 Dec 2011 11:24:38 +0000 (11:24 +0000)
committerJonny Lamb <jonnylamb@gnome.org>
Thu, 15 Dec 2011 16:04:45 +0000 (16:04 +0000)
We need to notify when the channel dispatcher calls HandleChannels on
us with a channel we already handle. However, we don't want to notify
if we claim a new incoming channel which doesn't actually have
anything interesting in it yet.

For example, a new channel pops up just to give a delivery
notification. We want (or, need) to handle it but don't want to notify
for it.

Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=666243
Signed-off-by: Jonny Lamb <jonnylamb@gnome.org>
js/ui/telepathyClient.js

index 9f9d12ebbd3c7c7fa9be30b6efb5771496b6c320..90f6b67780ce2cc164e8b4feea7f23b856f15e84 100644 (file)
@@ -197,11 +197,11 @@ const Client = new Lang.Class({
 
     _handleChannels: function(handler, account, conn, channels,
                               requests, user_action_time, context) {
-        this._handlingChannels(account, conn, channels);
+        this._handlingChannels(account, conn, channels, true);
         context.accept();
     },
 
-    _handlingChannels: function(account, conn, channels) {
+    _handlingChannels: function(account, conn, channels, notify) {
         let len = channels.length;
         for (let i = 0; i < len; i++) {
             let channel = channels[i];
@@ -212,7 +212,18 @@ const Client = new Lang.Class({
                 continue;
             }
 
-            if (this._tpClient.is_handling_channel(channel)) {
+            // 'notify' will be true when coming from an actual HandleChannels
+            // call, and not when from a successful Claim call. The point is
+            // we don't want to notify for a channel we just claimed which
+            // has no new messages (for example, a new channel which only has
+            // a delivery notification). We rely on _displayPendingMessages()
+            // and _messageReceived() to notify for new messages.
+
+            // But we should still notify from HandleChannels because the
+            // Telepathy spec states that handlers must foreground channels
+            // in HandleChannels calls which are already being handled.
+
+            if (notify && this._tpClient.is_handling_channel(channel)) {
                 // We are already handling the channel, display the source
                 let source = this._chatSources[channel.get_object_path()];
                 if (source)
@@ -285,7 +296,7 @@ const Client = new Lang.Class({
                                         Lang.bind(this, function(dispatchOp, result) {
                 try {
                     dispatchOp.claim_with_finish(result);
-                    this._handlingChannels(account, conn, [channel]);
+                    this._handlingChannels(account, conn, [channel], false);
                 } catch (err) {
                     throw new Error('Failed to Claim channel: ' + err);
                 }}));